﻿using System;
using System.Globalization;
using System.Linq;
using System.Security.Claims;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security;
using System.Data;
using System.Reflection;
using System.Web.SessionState;
using app.Api;
using app.Controllers.branch;

namespace app.Controllers
{
    public class 
        
        ApiController : Controller
    {
        // 接口注册
        private void Apis(string action1, string action2)
        {
            switch (action1)
            {
                case "article": new ApiArticle(this).Do(action2); break; // 文章
                case "role": new ApiRole(this).Do(action2); break; // 角色
                case "search": new ApiSearch(this).Do(action2); break; // 搜索
                case "admin": new ApiLogin(this).Admin(action2); break; // 管理员
                case "member": new ApiLogin(this).Member(action2); break; // 会员
                case "me": new ApiLogin(this).Me(action2); break; // 当前登录账户
                case "phone": new ApiPhone(this).Do(action2); break; // 手机
                case "GSXT": new ApiGSXT(this).Do(action2); break; // 手机
                case "database": new ApiDatabase(this).Do(action2); break; // 数据库
                case "upload": new ApiUpload(this).Do(action2); break; // 上传
                case "service": new ApiService(this).Do(action2); break; // 服务
                case "demand": new ApiDemand(this).Do(action2); break; // 需求
                case "abutment": new ApiAbutment(this).Do(action2); break; // 对接
                case "check": new ApiCheck(this).Do(action2); break; // 审核
                case "help": new ApiHelpDocument(this).Do(action2); break; // 帮助中心
                case "feedback": new ApiFeedback(this).Do(action2); break; // 反馈
                case "template": new ApiTemplate(this).Do(action2); break; // 系统模板     
                case "free_value": new ApiFreeValue(this).Do(action2); break; // 系统变量
                case "index_message": new ApiCommon(this).IndexMessage(action2); break; //首页信息
                case "datadictionary": new ApiDataDictionary(this).Do(action2); break; // 字典
                case "memberMessage": new ApiMemberMessage(this).Do(action2); break; // 反馈
                case "authEmail":new ApiLogin(this).authEmail(action2);break;   //邮箱认证
                case "plateformservice":new ApiPlateformService(this).Do(action2);break;//平台服务
                case "email": new ApiEmail(this).Do(action2); break; // 邮箱
                case "plateformabutment": new ApiPlateformService(this).Abutment(action2);break; // 平台服务对接
                case "service_step": new ApiStep(this).ServiceStep(action2); break; // 合作流程步骤
                case "service_step_template": new ApiStep(this).ServiceStepTemplate(action2); break; // 合作流程步骤模板
                case "listed_company":new ApiListedCompany(this).listedCompany(action2);break; //上市企业库模块
                case "admin_listed_company":new ApiListedCompany(this).AdminlistedCompany(action2);break;
                case "statistics":new ApiStatistics(this).Do(action2);break;//网站统计信息
                default: new ApiError(this).ErrorUrl(action1); break; // 错误
            }
        }

        // 入口，并获取异常
        public void Do(string action1, string action2)

        {
            object temp = Request["exception"];
            bool exception = false;
            if (temp == null)
            {
            }
            else
            {
                if(temp.ToString() == "1" || temp.ToString() == "true")
                {
                    exception = true;
                }
            }
            if(!exception)
            {
                try
                {
                    Apis(action1, action2);
                }
                catch (ApiException e)
                {
                    // 由api自动抛出的异常，不做处理
                }
                //catch (Exception e)
                //{
                //    // 显示程序异常
                //    new ApiError(this).HasException(e);
                //}
            }
            else
            {
                Apis(action1, action2);
            }
        }

        // 接口测试页面
        public ActionResult ApiTest()
        {
            return View();
        }
    }
}